@echo off
setlocal enabledelayedexpansion
title 物业保洁系统 - 全套部署环境安装（修正版）
color 0A
echo.
echo ╔══════════════════════════════════════════════════════════════╗
echo ║              物业保洁系统安装程序（修正版）                  ║
echo ║              Windows 10/11 全套部署环境                    ║
echo ╚══════════════════════════════════════════════════════════════╝
echo.
echo 正在检测系统环境...
echo ================================================

REM 检查管理员权限
net session >nul 2>&1
if %errorLevel% neq 0 (
    echo ❌ 需要以管理员身份运行此脚本
    echo 请右键点击此文件，选择"以管理员身份运行"
    pause
    exit /b 1
)

REM 检查Windows版本
ver | findstr /i "10\." >nul
if %errorLevel% neq 0 (
    ver | findstr /i "11\." >nul
    if %errorLevel% neq 0 (
        echo ⚠️  检测到非Windows 10/11系统，可能无法正常运行
        echo 建议使用Windows 10/11 64位专业版
        pause
    )
)

REM 创建安装目录
set INSTALL_DIR=C:\PropertySystem
mkdir "%INSTALL_DIR%" 2>nul
cd /d "%INSTALL_DIR%"

echo ✅ 安装目录: %INSTALL_DIR%
echo.

REM 安装Chocolatey（增强版）
echo 正在安装包管理器...
if not exist "%PROGRAMDATA%\chocolatey" (
    echo 正在安装Chocolatey...
    powershell -Command "Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))"
    
    REM 等待Chocolatey安装完成
    timeout /t 15 /nobreak >nul
    
    REM 手动刷新环境变量
    set "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
    set "PATH=%PATH%;%PROGRAMDATA%\chocolatey\bin"
    
    REM 验证安装
    if exist "%PROGRAMDATA%\chocolatey\bin\choco.exe" (
        echo ✅ Chocolatey安装成功
    ) else (
        echo ⚠️  Chocolatey可能未正确安装，继续尝试...
    )
) else (
    echo ✅ Chocolatey已安装
    choco --version
)

REM 更新Chocolatey
choco upgrade chocolatey -y

echo.
echo 正在安装必要软件...
echo ================================================

REM 安装Git（带错误处理）
echo 正在安装Git...
choco install git -y --force --no-progress
if %errorlevel% neq 0 (
    echo ⚠️  Git安装可能失败，尝试备用方法...
    REM 直接下载Git安装程序
    powershell -Command "Invoke-WebRequest -Uri 'https://github.com/git-for-windows/git/releases/download/v2.42.0.windows.2/Git-2.42.0.2-64-bit.exe' -OutFile '%TEMP%\Git-Installer.exe'"
    start /wait %TEMP%\Git-Installer.exe /VERYSILENT /NORESTART
) else (
    echo ✅ Git安装完成
)

REM 安装Docker Desktop（带错误处理）
echo 正在安装Docker Desktop...
choco install docker-desktop -y --force --no-progress
if %errorlevel% neq 0 (
    echo ⚠️  Docker安装可能失败，请手动安装...
    echo 📥 请访问: https://www.docker.com/products/docker-desktop/
    echo 📋 下载后双击安装，完成后重启电脑
) else (
    echo ✅ Docker Desktop安装完成
)

REM 安装Java 17（带错误处理）
echo 正在安装Java 17...
choco install openjdk17 -y --force --no-progress
if %errorlevel% neq 0 (
    echo ⚠️  Java 17安装可能失败，尝试备用方法...
    REM 直接下载AdoptOpenJDK
    powershell -Command "Invoke-WebRequest -Uri 'https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8%2B7/OpenJDK17U-jdk_x64_windows_hotspot_17.0.8_7.msi' -OutFile '%TEMP%\OpenJDK17-Installer.msi'"
    start /wait msiexec /i %TEMP%\OpenJDK17-Installer.msi /quiet /norestart
) else (
    echo ✅ Java 17安装完成
)

REM 安装Node.js（带错误处理）
echo 正在安装Node.js...
choco install nodejs -y --force --no-progress
if %errorlevel% neq 0 (
    echo ⚠️  Node.js安装可能失败，尝试备用方法...
    REM 直接下载Node.js安装程序
    powershell -Command "Invoke-WebRequest -Uri 'https://nodejs.org/dist/v18.18.0/node-v18.18.0-x64.msi' -OutFile '%TEMP%\NodeJS-Installer.msi'"
    start /wait msiexec /i %TEMP%\NodeJS-Installer.msi /quiet /norestart
) else (
    echo ✅ Node.js安装完成
)

REM 安装开发工具（分批安装避免超时）
echo.
echo 正在安装开发工具...
echo ================================================

REM 安装VS Code
echo 正在安装VS Code...
choco install vscode -y --force --no-progress

REM 安装Postman
echo 正在安装Postman...
choco install postman -y --force --no-progress

REM 安装其他工具
echo 正在安装其他工具...
choco install docker-compose -y --force --no-progress
choco install 7zip -y --force --no-progress
choco install notepadplusplus -y --force --no-progress

REM 验证安装
echo.
echo 正在验证安装...
echo ================================================

REM 创建验证脚本
echo @echo off > "%INSTALL_DIR%\verify-install.bat"
echo title 安装验证 >> "%INSTALL_DIR%\verify-install.bat"
echo color 0A >> "%INSTALL_DIR%\verify-install.bat"
echo echo 正在验证安装... >> "%INSTALL_DIR%\verify-install.bat"
echo echo ================================ >> "%INSTALL_DIR%\verify-install.bat"
echo git --version >> "%INSTALL_DIR%\verify-install.bat"
echo docker --version >> "%INSTALL_DIR%\verify-install.bat"
echo java -version >> "%INSTALL_DIR%\verify-install.bat"
echo node --version >> "%INSTALL_DIR%\verify-install.bat"
echo npm --version >> "%INSTALL_DIR%\verify-install.bat"
echo echo. >> "%INSTALL_DIR%\verify-install.bat"
echo echo 验证完成！ >> "%INSTALL_DIR%\verify-install.bat"
echo pause >> "%INSTALL_DIR%\verify-install.bat"

REM 创建启动脚本目录
set SCRIPTS_DIR=%INSTALL_DIR%\scripts
mkdir "%SCRIPTS_DIR%" 2>nul

REM 创建启动脚本（使用正确的路径）
echo @echo off > "%SCRIPTS_DIR%\start-system.bat"
echo title 物业保洁系统 - 启动服务 >> "%SCRIPTS_DIR%\start-system.bat"
echo color 0A >> "%SCRIPTS_DIR%\start-system.bat"
echo echo 正在启动物业保洁系统... >> "%SCRIPTS_DIR%\start-system.bat"
echo echo ================================================ >> "%SCRIPTS_DIR%\start-system.bat"
echo. >> "%SCRIPTS_DIR%\start-system.bat"
echo REM 检查Docker >> "%SCRIPTS_DIR%\start-system.bat"
echo docker --version ^>nul 2^>^&1 >> "%SCRIPTS_DIR%\start-system.bat"
echo if errorlevel 1 ( >> "%SCRIPTS_DIR%\start-system.bat"
echo     echo ❌ Docker未安装或未运行 >> "%SCRIPTS_DIR%\start-system.bat"
echo     echo 请确保Docker Desktop已启动 >> "%SCRIPTS_DIR%\start-system.bat"
echo     pause >> "%SCRIPTS_DIR%\start-system.bat"
echo     exit /b >> "%SCRIPTS_DIR%\start-system.bat"
echo ) >> "%SCRIPTS_DIR%\start-system.bat"
echo. >> "%SCRIPTS_DIR%\start-system.bat"
echo REM 等待Docker就绪 >> "%SCRIPTS_DIR%\start-system.bat"
echo echo 等待Docker服务就绪... >> "%SCRIPTS_DIR%\start-system.bat"
echo :waitfordocker >> "%SCRIPTS_DIR%\start-system.bat"
echo docker info ^>nul 2^>^&1 >> "%SCRIPTS_DIR%\start-system.bat"
echo if errorlevel 1 ( >> "%SCRIPTS_DIR%\start-system.bat"
echo     timeout /t 3 /nobreak ^>nul >> "%SCRIPTS_DIR%\start-system.bat"
echo     goto waitfordocker >> "%SCRIPTS_DIR%\start-system.bat"
echo ) >> "%SCRIPTS_DIR%\start-system.bat"
echo. >> "%SCRIPTS_DIR%\start-system.bat"
echo REM 启动系统 >> "%SCRIPTS_DIR%\start-system.bat"
echo echo 正在启动物业保洁系统... >> "%SCRIPTS_DIR%\start-system.bat"
echo cd /d "%~dp0" >> "%SCRIPTS_DIR%\start-system.bat"
echo cd .. >> "%SCRIPTS_DIR%\start-system.bat"
echo docker-compose up -d >> "%SCRIPTS_DIR%\start-system.bat"
echo. >> "%SCRIPTS_DIR%\start-system.bat"
echo echo 检查服务状态... >> "%SCRIPTS_DIR%\start-system.bat"
echo timeout /t 5 /nobreak ^>nul >> "%SCRIPTS_DIR%\start-system.bat"
echo docker-compose ps >> "%SCRIPTS_DIR%\start-system.bat"
echo. >> "%SCRIPTS_DIR%\start-system.bat"
echo echo 系统启动完成！ >> "%SCRIPTS_DIR%\start-system.bat"
echo echo 访问地址： >> "%SCRIPTS_DIR%\start-system.bat"
echo echo 前端: http://localhost:3000 >> "%SCRIPTS_DIR%\start-system.bat"
echo echo 后端: http://localhost:8080 >> "%SCRIPTS_DIR%\start-system.bat"
echo echo API文档: http://localhost:8080/swagger-ui.html >> "%SCRIPTS_DIR%\start-system.bat"
echo echo. >> "%SCRIPTS_DIR%\start-system.bat"
echo echo 按任意键继续... >> "%SCRIPTS_DIR%\start-system.bat"
echo pause >> "%SCRIPTS_DIR%\start-system.bat"

REM 创建快捷方式（使用相对路径）
set DESKTOP=%USERPROFILE%\Desktop
if exist "%DESKTOP%" (
    echo [InternetShortcut] > "%DESKTOP%\启动物业保洁系统.url"
    echo URL=file:///%SCRIPTS_DIR%\start-system.bat >> "%DESKTOP%\启动物业保洁系统.url"
    echo IconFile=%%SystemRoot%%\system32\SHELL32.dll >> "%DESKTOP%\启动物业保洁系统.url"
    echo IconIndex=21 >> "%DESKTOP%\启动物业保洁系统.url"
    
    echo [InternetShortcut] > "%DESKTOP%\验证安装.url"
    echo URL=file:///%INSTALL_DIR%\verify-install.bat >> "%DESKTOP%\验证安装.url"
    echo IconFile=%%SystemRoot%%\system32\SHELL32.dll >> "%DESKTOP%\验证安装.url"
    echo IconIndex=14 >> "%DESKTOP%\验证安装.url"
    
    echo ✅ 桌面快捷方式已创建
) else (
    echo ⚠️  无法创建桌面快捷方式，请手动运行 %SCRIPTS_DIR%\start-system.bat
)

REM 最终提示
echo.
echo ╔══════════════════════════════════════════════════════════════╗
echo ║                    安装完成！                                ║
echo ╠══════════════════════════════════════════════════════════════╣
echo ║  下一步操作：                                                ║
echo ║  1. 重启电脑以完成安装                                     ║
echo ║  2. 运行桌面上的"验证安装"检查环境                         ║
echo ║  3. 运行桌面上的"启动物业保洁系统"                       ║
echo ║                                                              ║
echo ║  📁 安装目录: %INSTALL_DIR%                                 ║
echo ║  📞 如遇到问题，请重新运行此脚本                         ║
echo ╚══════════════════════════════════════════════════════════════╝
echo.
echo 按任意键完成安装...
pause